#pragma once

#include <stdint.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif



    // PID控制器结构体
    typedef struct {
        // PID参数
        float kp;           // 比例系数
        float ki;           // 积分系数
        float kd;           // 微分系数
        // 目标值和反馈值
        float setpoint;     // 目标值
        float feedback;     // 反馈值
        // 内部状态
        float error;        // 当前误差
        float last_error;   // 上一次误差
        float integral;     // 积分累积值
        float derivative;   // 微分值
        // 输出限制
        float output_min;   // 输出最小值
        float output_max;   // 输出最大值
        // 输出值
        float output;       // PID输出值
        // 积分限幅和抗积分饱和
        float integral_limit; // 积分限幅
    } PID_Controller;

    // PID控制器函数声明
    void PID_Init(PID_Controller *pid, float kp, float ki, float kd, float output_min, float output_max);
    float PID_Compute(PID_Controller *pid, float feedback);
    void PID_SetSetpoint(PID_Controller *pid, float setpoint);
    void PID_Reset(PID_Controller *pid);

#ifdef __cplusplus
}
#endif